package com.gradumate.server;


import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.logging.Logger;

import com.gradumate.server.dao.LoginToken_DAO;
import com.gradumate.shared.Gebruiker;
import com.gradumate.shared.LoginToken;

public class LoginTokenGenerator {
	
	// Logger
	private static final Logger log = Logger.getLogger(LoginTokenGenerator.class.getName());
	
	/**
	 * Maakt een LoginToken object aan en stuurt die terug
	 * @param Gebruiker gebruiker object wie de functie moet kunnen uitvoeren
	 * @param Gebruiker student object die beoordeeld gaat worden
	 * @param int function functie die uitgevoerd gaat worden
	 * @return LoginToken object
	 */
	public static LoginToken getLoginToken(Gebruiker gebruiker, Gebruiker student, int function) {
		LoginToken lt = new LoginToken();
		lt.setToken(generateToken(gebruiker.getGebruikerEmail()));
		lt.setGebruikerEmail(gebruiker.getGebruikerEmail());
		lt.setFunction(function);
		lt.setStudentEmail(student.getGebruikerEmail());
		
		// Object opslaan in DS
		LoginToken_DAO ltDAO = new LoginToken_DAO();
		ltDAO.addLoginToken(lt);
		
		return lt;
	}
	
	/**
	 * Maakt een token aan
	 * @return String met unieke token
	 */
	private static String generateToken(String salt) {
		Date now = new Date();
		String toHash = now.toString() + salt;
		log.info("toHash: " + toHash);
		String hash = "";
		
		MessageDigest md;
		 try {
			 md = MessageDigest.getInstance("SHA");
		     md.update(toHash.getBytes(), 0, toHash.length());
		     hash = new BigInteger(1,md.digest()).toString(16);
		 } catch (NoSuchAlgorithmException e) {
			 
		 }
		 log.info("Hash: " + hash);
		 return hash;
	}
}
